import Model from '../ModelAlgorithm'

// m * n type
function algorithm_mn(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr.length; j++) {
      if (arr[i] > arr[j]) {
        var mid = arr[i]
        arr[i] = arr[j]
        arr[j] = mid
      }
    }
    console.log(arr)
  }
  return arr
}

// cutting
// 这里要理解为什么能这样把j前面几次的比较省略掉
// j的前面的元素已经在前n轮的比较中和j比较过了，可以这么理解：这时候j前面的元素已经比j所在的元素小了
function algorithm(arr) {
  console.log('当前调用冒泡排序：')
  
  const len = arr.length
  for (var i = 0; i < len; i++) {
    // 注意被剪掉的部分的计算 j=i+1
    for (var j = i + 1; j < len; j++) {
      if (arr[i] > arr[j]) {
        var mid = arr[i]
        arr[i] = arr[j]
        arr[j] = mid
      }
    }
    console.log(arr)
  }
  return arr
}

function description() {
  return {
    title: '冒泡排序(Bubble)',
    desc: [],
  }
}

export default (runner) => {
  const entity = new Model(algorithm, description())
  runner.injectAlgorithm('bubble', entity)
}
